package movilmax.sia_corp.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import utilidades.Cadena;

import movilmax.sia_corp.model.Contratos;
import movilmax.sia_corp.model.DetalleContrato;
import movilmax.sia_corp.model.Dispositivos;
import movilmax.sia_corp.model.Estados;
import movilmax.sia_corp.model.Municipios;
import movilmax.sia_corp.model.ServicioCorp;
import movilmax.sia_corp.model.Servicios;
import movilmax.sia_corp.model.Usuario;
import movilmax.sia_corp.model.Listax;
import apli.conectar.Conectar;
import basedatos.Resultado;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class CargarListaUpdate extends ActionSupport{

	private static final long serialVersionUID = 3624607545181493691L;

	private Map<String, Contratos> accordion;
	private List<Listax> lst_servicios;
	private List<Listax>   producto_vel;
	private String cod_cliente;
	
	
	
	@SuppressWarnings("rawtypes")
	public String cargar_contratos() throws Exception {
        accordion = new HashMap<String, Contratos>();
	    Map session = ActionContext.getContext().getSession();
	    Usuario USUARIO = (Usuario)session.get("ses_usuario");
	    Contratos CONTRATO2= new Contratos();
	    if (USUARIO!=null){
		    Conectar BASE= new Conectar();
		    if(BASE.getMsg().equals("SI" )  ){
		    	String SQL="Select C.*,M.municipio as d_m,M.cod as cod_m,E.estado as d_e,E.cod as c_e,V.descripcion as des_vendedor from contratos C,municipios M,estados E,vendedores V where C.cliente='"+ this.getCod_cliente() +"' and C.tipo in ('CORPORATIVO','DEMO' ) and not C.status='ANULADO' and C.municipio=M.cod and M.estado=E.cod and C.vendedor=V.cod Order By C.fecha DESC";
				Resultado RCS=BASE.getBaseDatos().consultar(SQL);
				if(RCS.RP){
					int i=1;
				    do{
					  Contratos CONTRATO= new Contratos();    
					  String CONT=RCS.getCadena("contrato");
					  CONTRATO.setId(new Cadena().convertirStr(i));
					  CONTRATO.setContrato(RCS.getCadena("contrato"));
					  CONTRATO.setTipo(RCS.getCadena("tipo"));
					  CONTRATO.setFecha(RCS.getCadena("fecha"));
					  CONTRATO.setStatus(RCS.getCadena("status"));
					  CONTRATO.setAvcalle(RCS.getCadena("avcalle"));
					  CONTRATO.setCiudad(RCS.getCadena("ciudad"));
					  CONTRATO.setDes_inmuemble(RCS.getCadena("des_inmueble"));
					  CONTRATO.setNro_inmueble(RCS.getCadena("nro_inmueble"));
					  CONTRATO.setNumerotarjeta(RCS.getCadena("numerotarjeta"));
					  CONTRATO.setPiso_inmueble(RCS.getCadena("piso_inmueblea"));
					  CONTRATO.setTipoinmueble(RCS.getCadena("tipoinmueble"));
					  CONTRATO.setTipotarjeta(RCS.getCadena("tipotarjeta"));
					  CONTRATO.setVencetarjeta(RCS.getCadena("vencetarjeta"));
					  CONTRATO.setZona(RCS.getCadena("zona"));
					  
					  CONTRATO.setDes_vendedor(RCS.getCadena("des_vendedor") );
					  CONTRATO.setFecha_registro(RCS.getCadena("fecha_registro") );
					  CONTRATO.setMventa(RCS.getCadena("tt_recurrente") );
					  
					  Municipios Mun =new Municipios();
					  Mun.setCod(RCS.getCadena("cod_m"));
					  Mun.setMunicipio(RCS.getCadena("d_m"));
					  Estados Est =new Estados();
					  Est.setCod(RCS.getCadena("c_e"));
					  Est.setEstado(RCS.getCadena("d_e"));
					  Mun.setEstado(Est);
					  CONTRATO.setMunicipo(Mun);
					  LinkedList<DetalleContrato> DETALLE_CONTRATO_=new LinkedList<DetalleContrato>();
					  SQL="Select D.contrato,D.mac,D.status,X.serial_adm,X.serial_fabrica,X.tipo,X.marca,X.modelo,P.descripcion as serv,P.codigo as cod_serv "+
					  "from detalle_contrato D,dispositivos X,productos P "+
					  "where D.contrato='"+CONT+"' and D.mac=X.mac and D.servicio=P.codigo Order By D.mac DESC";
					  Resultado RCS_D=BASE.getBaseDatos().consultar(SQL);
					  if(RCS_D.RP){
						  do{ 
							 DetalleContrato DETALLE_CONTRATO=new DetalleContrato();
							 Dispositivos DISPOSITIVOS= new Dispositivos();
							 Servicios SERVICIO= new Servicios();  
							 DISPOSITIVOS.setMac(RCS_D.getCadena("mac"));
							 DISPOSITIVOS.setMarca(RCS_D.getCadena("marca"));
							 DISPOSITIVOS.setModelo(RCS_D.getCadena("modelo"));
							 DISPOSITIVOS.setSerial_adm(RCS_D.getCadena("serial_adm"));
							 DISPOSITIVOS.setSerial_fab(RCS_D.getCadena("serial_fabrica"));
							 DISPOSITIVOS.setTipo(RCS_D.getCadena("tipo"));
							 SERVICIO.setCodigo(RCS_D.getCadena("cod_serv"));
							 SERVICIO.setDescripcion(RCS_D.getCadena("serv"));
						     DETALLE_CONTRATO.setStatus(RCS_D.getCadena("status"));
						     DETALLE_CONTRATO.setSERVICIO(SERVICIO);
						     DETALLE_CONTRATO.setMAC(DISPOSITIVOS);
						     DETALLE_CONTRATO_.add(DETALLE_CONTRATO);
						  }while(RCS_D.sigItem()); 
					  }	 
					  CONTRATO.setDetalle(DETALLE_CONTRATO_);
					  SQL="Select P.descripcion as des_serv,D.monto,Z.cod as cod_suc,Z.descripcion as des_suc,D.cod,Z.cod as cod_sucursal "+
					  "From detalle_servicios_corp D,productos P,corp_sucursales Z,contratos C "+
					  "where D.contrato='"+CONT+"' and D.contrato=C.contrato and D.servicio=P.codigo and D.sucursal=Z.cod order by D.cod  ";
					  RCS_D=BASE.getBaseDatos().consultar(SQL);
					  LinkedList<ServicioCorp> DC_=new LinkedList<ServicioCorp>();
					  if(RCS_D.RP){
						  do{ 
							 ServicioCorp DC=new ServicioCorp();
							 DC.setConta(new Cadena().convertirStr( DC_.size()+1 ));
							 DC.setCodigo(RCS_D.getCadena("cod"));
							 DC.setCod_sucursal(RCS_D.getCadena("cod_sucursal"));
							 DC.setDes_sucursal(RCS_D.getCadena("des_suc"));
							 DC.setDescripcion(RCS_D.getCadena("des_serv"));
							 DC.setMonto(RCS_D.getCadena("monto"));
						     DC_.add(DC);
						  }while(RCS_D.sigItem()); 
					  }
					  CONTRATO.setDET_SC(DC_);
					  accordion.put("dv"+i,CONTRATO);
					  i++;
				   }while(RCS.sigItem());  
				}else{
					CONTRATO2.setContrato("Cliente no posee contratos asociados");	
				    accordion.put("dv1",CONTRATO2);	 
				    this.addActionError("Cliente no posee contratos asociados");
				    return ERROR;
				}	
			}else{
				CONTRATO2.setContrato("No hay conexion al servidor"); 
				accordion.put("dv1",CONTRATO2); 
				this.addActionError("No hay conexion al servidor");
				return ERROR;
			}
	    }else{
	    	CONTRATO2.setContrato("Debes iniciar sesion");
	    	accordion.put("dv1",CONTRATO2);
	    	this.addActionError("La sesion del usuario ha caducado, debes volver a iniciar sesion");
	    	return ERROR;
	    }
	    return SUCCESS;
    }
	
	
		public String cargarVelocidades(){
			Conectar BASE= new Conectar();
			producto_vel=new ArrayList<Listax>();
			String SQL=" select cod,descripcion,megas from velocidades_disponibles where mostrar='1' and venta='1' order by  megas ASC ";
			  Resultado RCS=BASE.getBaseDatos().consultar(SQL);
			  if(RCS.RP){
				  do{ 
					  Listax LST=new Listax();
					  LST.setCod(RCS.getCadena("cod"));
					  LST.setDescripcion(RCS.getCadena("megas")+" Mbps");
					  producto_vel.add(LST);
				  }while(RCS.sigItem()); 
			  }
			  BASE.getBaseDatos().cerrarConexion();
			return SUCCESS;  
		}
		
		
		private String listar_servicios() {
			Conectar BASE= new Conectar();
			lst_servicios= new ArrayList<Listax>();
				  try{
			       String SQL="Select X.cod,UPPER(X.descripcion) as descripcion "+
		    	      "From corp_servicios X  "+
		    	      "where X.mostrar='1' and cli='1' Order by X.descripcion  "; 	 	

					Resultado  RCS=BASE.getBaseDatos().consultar(SQL);
					  if(RCS.RP){
						  do{ 
							  //System.out.println("*********************-- COD:"+RCS.getCadena("cod")+"     Descripcion:"+RCS.getCadena("descripcion"));
							  Listax LST=new Listax();
							  LST.setCod(RCS.getCadena("cod"));
							  LST.setDescripcion(RCS.getCadena("descripcion"));
							  lst_servicios.add(LST);
						  }while(RCS.sigItem()); 
					  }
				   }catch(Exception err  ){
						//hubo un error .....
				}
			   BASE.getBaseDatos().cerrarConexion();
			  return SUCCESS;
		} 

	


		public String getJSON(){
			@SuppressWarnings("rawtypes")
			Map session = ActionContext.getContext().getSession();
			  Usuario USUARIO = (Usuario)session.get("ses_usuario");
			  if (USUARIO==null){
				  this.addActionError("La sesion del usuario ha caducado");
				  return ERROR;
			  }
			  Conectar BASE= new Conectar();
			  if(BASE.getMsg().equals("SI")){
				  
				  cargarVelocidades();
				  listar_servicios();
				  
				  BASE.getBaseDatos().cerrarConexion();
				 return SUCCESS;
			  }else{
				  this.addActionError("No hay conexion al servidor");
			      return ERROR;
			  }
	      }
	
	
	public Map<String, Contratos> getAccordion() {
		return accordion;
	}
	public void setAccordion(Map<String, Contratos> accordion) {
		this.accordion = accordion;
	}
	public String getCod_cliente() {
		return cod_cliente;
	}
	public void setCod_cliente(String cod_cliente) {
		this.cod_cliente = cod_cliente;
	}
	public List<Listax> getProducto_vel() {
		return producto_vel;
	}
	public void setProducto_vel(List<Listax> producto_vel) {
		this.producto_vel = producto_vel;
	}
	public List<Listax> getLst_servicios() {
		return lst_servicios;
	}
	public void setLst_servicios(List<Listax> lst_servicios) {
		this.lst_servicios = lst_servicios;
	}
	
}
